package com.haopt.elasticjob.annotation;

import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;
import com.dangdang.ddframe.job.lite.api.strategy.JobShardingStrategy;
import com.dangdang.ddframe.job.lite.api.strategy.impl.AverageAllocationJobShardingStrategy;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 定义使用ElasticSimpleJob定时任务注解
 * @author haopt
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ElasticSimpleJob {

    /**
     * job唯一标识
     */
    String jobName();

    /**
     * 定时任务
     */
    String corn();

    /**
     * 分片个数
     */
    int shardingTotalCount() default 1;

    /**
     * 服务重启，是否覆盖zookeerper信息。true代表覆盖
     */
    boolean overwrite() default false;

    /**
     * 提供elasticjob默认分片规则，默认是服务平均分片(根据名字hash)
     */
    Class<? extends JobShardingStrategy>  jobShardingStrategyClass() default AverageAllocationJobShardingStrategy.class;

    /**
     * 设置定时任务监听器
     */
    Class<? extends ElasticJobListener>[] listeners() default {};

    /**
     * 是否开启失效转移，为true为开启
     */
    boolean failover() default false;

    /**
     * 是否开启幂等性，ture开启幂等性
     * @return
     */
    boolean monitorExecution() default false;
}
